Verilog读写文件

您所在的位置:网站首页 verilog file文件怎么打开 Verilog读写文件

Verilog读写文件

2024-07-15 22:39| 来源: 网络整理| 查看: 265

一.读写文件相关的系统任务

    在进行FPGA模块的开发过程中,常常需要对数据的处理过程进行行为仿真,以验证FPGA的功能逻辑是否正确,因此需要将FPGA行为仿真的结果与MATLAB或C/C++的处理结果进行对比验证。但需要对比的数据量比较大时,将输入输出结果数据存入文件进行对比是非常常用的方法。

    Verilog中读写文件常用到的系统任务主要有以下几个:

1.文件打开、关闭与定位操作:$fopen(file_name)、$fclose(file_name)、$fseek();

2.文件读取:$fscanf和 $​readmemh,其中$​readmemh的作用是件文件中的数据一次性的读入某个数组中,然后依次从数组中取出1个数据进行处理;而$fscanf的作用是从文件中读出一行的数据。两个系统任务的常见用法如下:

$​readmemh:

reg  [15:0] data_mem [0:1023] ;//定义一个位宽为16bit,深度为1024的mem

$​readmemh("path/data.txt",data_src_mem);

$fscanf:

reg [15:0] reg1, reg2, reg3;  //定义三个位宽为16bit的寄存器

cnt = $fscanf(fp, "%d %d %d", reg1, reg2, reg3);//从数据文件中以十进制的方式读出一行中的三个数

3.数据写入文件:$fwrite(file_handle,"%d\n",reg1) ;

二.调用示例

1.利用Matlab生成数据文件

    在Matlab中生成一正弦波信号,并将其定点化后存入.txt文件。Matlab代码如下所示:

%% 实验在vivado中通过verilog读取txt文件数据 %% DJason 2018.04 clc; close all; clear all; %% 生产一个正弦波信号 fs = 100; %采样率100 t0 = 5; %采样时间5s N = fs*t0; %采样点数 f0 = 2; %信号频率 t = (0:N-1)/fs; s = cos(2*pi*f0*t); %% 将信号定点化,转为int16型数据 S = int16(s.*2^15*0.8); %% 将定点后的数据写入文件 fp = fopen('data.txt','wt'); for i =1 : length(S) fprintf(fp, '%d\n', S(i)); end fclose(fp);

生成的正弦波下图

2.在Vivado中读入数据文件

    将生成的data.txt文件放到vivado工程目录下的\XXX_project.sim\sim_1\behav目录下,然后编写TestBench对该文件进行读取,同时将读取的数据存放到另一个文件中,verilog代码如下所示

module test( ); integer fp_r,fp_w; integer count; reg clk; reg [15:0] reg1; initial begin clk = 0; reg1 = 0; count = 0; fp_r=$fopen("data.txt","r");//以读的方式打开文件 fp_w=$fopen("data_out.txt","w");//以写的方式打开文件 end always@(posedge clk) begin if(count < 500) begin $fscanf(fp_r,"%d" ,reg1) ;//每次读一行 count


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3